import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;


/**
 * 短作业优先调度算法实现类
 * @author MMMMM
 *
 */
public class ShortJobFirst {
    @SuppressWarnings("resource")
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("短作业优先调度算法（sjf）开始：");
        System.out.println("请先输入作业的相关信息：（输入no代表结束）");
        //输入作业队列
        List<Job> jobs = new ArrayList<>();
        //执行作业队列
        List<Job> execJobs = new ArrayList<>();
        //作业信息初始化
        do {
            Job job = new Job();
            Job initJob = ShortJobFirstUtil.init(job);
            jobs.add(initJob);
            System.out.println("是否要继续输入作业相关信息：（是输入yes，否输入no）");
        } while (scanner.nextLine().equalsIgnoreCase("yes"));
        System.out.println("-----------------");
        //确认初始化成功
        /*for (Job job : jobs) {
            System.out.println(job.toString());
        }*/
        ShortJobFirstUtil.sleepJob(jobs);
        System.out.println("-----------------");
        //执行调度算法，将输入队列作业按照sjf算法，插入到执行队列中
        ShortJobFirstUtil.dispatchJob(jobs,execJobs);
        /*for (Job job : execJobs) {
            System.out.println(job.toString());
        }*/
        /*//作业信息根据服务时间递增排序
        ShortJobFirstUtil.sortByServerTime(jobs);
        //确认排序成功
        for (Job job : jobs) {
            System.out.println(job.toString());
        }*/
        //求出周转时间和平均周转时间并记录在每一个作业实体中
        ShortJobFirstUtil.turnRoundTime(execJobs);
        for (Job job : execJobs) {
            System.out.println(job.toString());
        }
        System.out.println("-----------------");
        ShortJobFirstUtil.showTime(execJobs);
    }
}